package com.flong.scala.base

/**
 * Created by liangjl
 * Date on 2016/6/30-9:05
 * Version:1.0
 * Description:trait特征的使用.
 * 定义一个trait特征
 *
 * 类似于Java接口，性状是用来通过指定的支持的方法的签名定义的对象类型。就像在Java中8
 * 斯卡拉允许性状得到部分执行;即，它可以定义默认实现一些方法。在对比类，性状可以不具有构造参数
 */
trait mytrait1 {

  println("第一个trait")
}

// 定义一个trait2特征
trait mytrait2 {
  println("第二个trait")
}

// 定义一个trait3特征

trait mytrait3 {
  println("第三个trait")
}

// 定义一个traitClass1类关联mytrait1关联mytrait2关联mytrait3
class traitClass1 extends mytrait1 with mytrait2 with mytrait3 {


  println("traitClass1");

}


/**
 * 此时ObjectTraitMain继承一下App这个trait进行运行一下
 */

object ObjectTraitMain extends App {

  //创建一个traitClass1对象
  var traitClass1 = new traitClass1();

  /**
   * 此时运行看到的结果是
   * 第一个trait
   * 第二个trait
   * 第三个trait
   * traitClass1
   *
   * 而且traitClass1是最后输出,说明是类继承trait并关联它，它会首先输出子类的信息再输出父类的信息
   */

}


